package com.itheima.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import com.itheima.domain.Category;
import com.itheima.domain.CategoryExample;
import com.itheima.domain.Movies;
import com.itheima.domain.MoviesExample;
import com.itheima.mapper.CategoryMapper;
import com.itheima.mapper.MoviesMapper;
import com.itheima.service.MoviesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

@Service
public class MoviesServiceImpl implements MoviesService {

    @Autowired
    MoviesMapper moviesMapper;

    @Override
    public PageInfo<Movies> findByPage(Integer pageNum, Integer pageSize, Integer cid, String keyword) {
        //设置分页查询条件
        PageHelper.startPage(pageNum,pageSize);
        //基于上映时间降序
        MoviesExample moviesExample = new MoviesExample();

        // 时间查询降序 desc  , 升序asc   这个得写判断的上边下边基于上边的按sql语句
        moviesExample.setOrderByClause("show_time asc");

        // 然后这里进行判断做 查询存在是否相等条件查询
        MoviesExample.Criteria criteria = moviesExample.createCriteria();
        if (cid != null){
             criteria.andCidEqualTo(cid);
        }
        if (keyword != null && !"".equals(keyword)){
            criteria.andKeywordLike("%"+keyword+"%");
        }
        List<Movies> movies = moviesMapper.selectByExample(moviesExample);
        return new PageInfo<Movies>(movies);
    }

    @Override
    public void save(Movies movies) {
        // 这里只是保存部分的字段 保存全部的字段用别的
        if (movies.getId()==null){

        moviesMapper.insertSelective(movies);
        }else {
            //Selective 一般用这个会是查询或者保存部分的不是全部的
            moviesMapper.updateByPrimaryKeySelective(movies);
        }
    }

    @Override
    public Movies findById(Integer id) {

        return moviesMapper.selectByPrimaryKey(id);
    }

    @Override
    public void delete(Integer id) {
        moviesMapper.deleteByPrimaryKey(id);
    }

    @Override
    public void deleteBanTch(Integer[] ids) {
        for (Integer id : ids) {
            moviesMapper.deleteByPrimaryKey(id);
        }
    }


    /**
     * 基于前台代码的影视列表的查询
     * @return
     */

    @Autowired
    CategoryMapper categoryMapper;

    @Override
    public Map<String, List<Movies>> findMoviesMap() {

        //现在进行查询
        // 首先查询影视列表的种类进行查询放到list的集合里
         // list集合可以存储有序的数据可以通过索引也就是id 可以进行相应的定义到值中
        /**
         * 定义集合Map 是LinkedHashMap是有序的集合
         */

        Map<String , List<Movies>> maps = new LinkedHashMap<>();

        List<Movies> list = new ArrayList<>();

  // 先查分类 创建条件查询对象
        CategoryExample categoryExample = new CategoryExample();
        // 基于条将对象进行 升序 和降序的查询
        // 时间查询降序 desc  , 升序asc   这个得写判断的上边下边基于上边的按sql语句
        categoryExample.setOrderByClause("order_no asc");
        // 然后基于条将进行查询所有
        List<Category> categories = categoryMapper.selectByExample(categoryExample);

        // 对得到的集合进行遍历出现对应的的movies
        for (Category category : categories) {
            // 先获取页面需要的名称电影 这里就是键值key
            String categoryName = category.getCategoryName();

              //设置每个种类的分页查询条件
            PageHelper.startPage(1,6);

         // 创建movie条件查询对象
            MoviesExample moviesExample = new MoviesExample();



            // 基于上映时间进行查询 将要
             moviesExample.setOrderByClause("show_time desc");
            // 获取分类的id进行下一步的链接 分类
            Integer id = category.getId();
            // 这里得查出来用id 不然会出现 每个id 有相同的照片
            moviesExample.createCriteria().andCidEqualTo(id);
            // 基于查到的分类id和 movie的条将进行查询
            List<Movies> moviesList = moviesMapper.selectByExample(moviesExample);
            // 最后把查询的数据放到map里
            maps.put(categoryName,moviesList);
        }
      // 进行返回
        return maps;






    }

    /**
     * 基于前台的电影数据回想
     * @param id
     * @return
     */
    @Override
    public Movies findByMovies(Integer id) {
      return  moviesMapper.selectByPrimaryKey(id);
    }

}
